- web6047 - (2021/09/10(金) 現在、システム調整中のため、一部の表示がおかしいかもしれません)

there is no canvas.

web6047 2020 9月

プログラミングやRPG(作るほう)が好きな人の日記


このホームページは毎日 夜11時にアクセスできなくなります。

朝6時半に再開されます。(世の中のネット依存対策として)

例外で、アクセスができる場合があります。aboutThisWebsite を参照してください。

NO PC WEEK に代わる PC 使用制限のしくみ(β版)
No. A.(ついでに
勉強1問)
B. PC使用
開始時刻
C. 予定使用時間 時間:分
(当日限度時間 時間:分)
D. 予定終了時刻 E. 実際終了時刻 F. 実際使用時間 時間:分
(当日限度時間 時間:分)
オーバー理由
G. 判定 H. 作業内容
197 19:05 1:30(1:30) 20:35 23:30 2:55(1:30)
回路の疑念を晴らしたい
× 自作DRAM回路
196 23:40 0:30(0:30) 24:10 24:23 0:43(0:30) 自作DRAM回路
195 21:50 1:30(4:00) 23:20 24:36 2:46(4:00)
できんかった
× 自作DRAM回路
194 16:25 1:00(4:00) 17:25 17:37 1:12(4:00) 自作DRAM回路
193 11:50 1:30(4:00) 13:20 13:34 1:44(4:00) 記事作成
192 23:50 1:00(4:00) 24:50 1:08 1:18(4:00) 記事作成
191 21:00 1:30(4:00) 22:30 22:42 1:42(4:00) 記事作成
190 15:55 1:30(4:00) 17:25 17:48 1:53(4:00) 記事作成
189 19:20 1:30(1:30) 20:50 21:10 1:50(1:30) RPG試作
188 22:40 1:00(4:00) 23:40 23:45 1:05(4:00) RPG試作
187 15:10 1:00(4:00) 16:10 16:12 1:02(4:00) RPG試作
186 11:15 2:00(4:00) 13:45 13:49 2:04(4:00) RPG試作
185 23:30 1:30(3:00) 1:00 1:10 1:40(3:00) RPG試作
184 19:25 1:30(3:00) 20:55 21:02 1:37(3:00) RPG試作
記録しなかった長時間作業あり 作業内容:電子工作+記事作成
183 18:30 1:30(3:00) 20:00 20:02 1:02(3:00) RPG試作
182 24:00 1:00(1:00) 25:00 25:18 1:18(1:00) RPG試作
記録しなかった長時間作業あり 作業内容:記事作成
(やっぱり記事作成はNGだな…再び)
181 18:50 1:30(1:30) 20:20 20:43 1:53(1:30) サイトCGI改修(終)
180 21:35 1:00(2:00) 22:35 23:01 1:26(2:00) サイトCGI改修
179 18:30 1:00(2:00) 19:30 19:47 1:17(2:00) サイトCGI改修
178 19:25 1:00(3:00) 20:25 20:31 1:06(3:00) RPG試作
177 15:55 2:00(3:00) 17:55 17:51 1:56(3:00) 9月扉スクリプト(終)
記録しなかった長時間作業あり 作業内容:記事作成
(やっぱり記事作成はNGだな…)
176 21:50 1:00(2:00) 22:50 23:01 1:11(2:00) 9月扉スクリプト
175 19:15 1:00(2:00) 20:15 20:28 1:13(2:00) 9月扉スクリプト
174 21:20 1:00(2:00) 22:20 23:00 1:40(2:00)
おおづめ
× 9月扉スクリプト
173 18:25 1:00(2:00) 19:25 19:42 1:17(2:00) 9月扉スクリプト
172 21:05 1:00(3:00) 22:05 22:36 1:31(3:00)
おおづめ
× 9月扉スクリプト
171 × 14:00 1:00(3:00) 15:00 15:10 1:10(3:00) トップページ調整
170 11:10 1:00(3:00) 12:10 12:25 1:15(3:00) 9月扉スクリプト
169 19:45 1:00(3:00) 20:45 21:17 1:32(3:00)
当初のイメージを求めた
× 9月扉スクリプト
168 14:10 1:00(3:00) 15:10 15:35 1:25(3:00) 8月扉スクリプト
167 11:50 1:00(3:00) 12:50 13:14 1:24(3:00) 8月扉スクリプト
166 23:45 1:00(2:00) 0:45 1:18 1:33(2:00)
デバッグできず
× 8月扉スクリプト
165 22:00 1:00(2:00) 23:00 23:14 1:14(2:00) 8月扉スクリプト
164 20:50 1:00(2:00) 21:50 22:05 1:15(2:00) 8月扉スクリプト
163 18:55 1:00(2:00) 19:55 20:08 1:13(2:00) 8月扉スクリプト

この表の意図:

多くの人はパソコンのやりすぎやネットゲームのやりすぎには困っていると思います。

参考に言うと、この表を使う前の私は 1 回の PC 使用時間がノンストップで 17 時間というときもあったし、平均で言うと毎日 9 時間はやっていたと思います。

そういう徹夜とか長時間作業をするよりも、昼間の短時間作業のほうが生産性は高いのでは? と数年前から考えてきました。

パソコンの使用時間を事前に決めてネット上に公開することで、パソコンのやりすぎを防止できるかどうかこの表を使って試しています。


記入の法則:

  • 日付は表示していません。しかし、白と灰色の色分けは、同じ色の連続で同じ日を表しています。
  • 左端の「A. (ついでに勉強1問)」について
    この表の目的とは異なりますが、ついでとして、遊び100%の毎日を送るときでも勉強の習慣を忘れないために、たった1問で良いので解くことにします。
    正直言うと毎回遊ぶ前に必ず1問勉強するのは心が折れそうです。でも慣れさえすれば…と思います。追記:やってみると結構効果的で役立っています。
    行ったら◎、行わなかったら× を記入。
  • 右端の「判定」について
    「D. 予定終了時刻」と「E. 実際終了時刻」を比べて、オーバーした時間によって判定を行う。
    ◎ 9分以下
    ○ 10分~19分
    △ 20分~29分
    × 30分以上 (オーバー理由を記載する)
  • 平日1.5h、2.0hのPC使用の連続が負担になっているので、「平日のPC使用は月水金のみ、各日1.5hまで」とする。火木でPC使用しないことでうまいぐあいに「体力回復」されて、「生活」がうまく回り、プログラミング以外の「創作活動」(イラスト等)に時間が取れることを期待する。


例外事項:

  • 「E. 実際終了時刻」のあと、プログラミングの場合のみスッパリ終了しないで、今後のプログラミングの方針をテキストファイルに書くのは OK にしています。

廃止事項:

以下の事項は実施できないので廃止する。

  • 自分のホームページやプログラムを読んでいて誤字脱字を発見した際、その「修正」は訪問者にとっても管理人にとっても有益なので、「タイマーで測って10分未満。1点修正したら終了」を条件に作業してよい。また、基本的にそれを連続させないこと。


中途結果:

結構いい結果になっています。炊事や掃除、散歩、早起きなどが好ましいリズムでできるようになりました。

(2020年9月6日追記:散歩、早起きは最近あまりできていません。掃除や炊事は理想的にできています)

この取り組みが、15才~18才くらいまでの高専(中退)に所属していた時に実施できていたら良かっただろうなと思います。でもそれくらいの年齢では経験が浅く、このような効果的なルール作りを行うことはできなかったと思います。自分は人に比べて「創作意欲」や「ゲームで遊ぶ欲望」におぼれやすいところがあり、そのコントロールはとても難しいです。

ちなみに、分単位で記録を取ったりして、だいぶマメに見えるかもしれませんが、Windows の日本語入力(MS-IME)で「いま」と入力し、 変換 キーを押さずに ボタンを押すと現在の時刻になります。道具の便利さが人をマメに見せるのかもしれません。



2020/9/30(水)

自作DRAM回路に問題 -[dram]

私が取り組んでいる自作のDRAM回路ですが、「根本的に何かが間違っているのでは」という疑念がわいてきました。

疑念が晴れるまで、DRAMの記事はネットワーク上では削除して、こちらで保管(ローカルコンピューターに保管)しておきます。


2020/9/25(土)

自作DRAM回路 -[dram]

通販で部品を購入したので、とりあえず形だけ作成しました。

8ビット4アドレスのDRAMメモリーです。

しかし、ホントは 10uF のコンデンサを使うはずだったのに、間違えて 1uF を買っていたことに気づきました。

1uF だと PIC マイコンではできるけど、IchigoCake だとできなかったはず…


ガンプラ「RG νガンダム(ニューガンダム)」 -[plamo]

去年の11月だったっけ…「RG νガンダム」を買ったんでした。

それでついこのあいだ、9月の初めだったかな?やっと箱を開けて作り始めました。

今日はその改造の話と、顔のシール貼りの話、それから「装甲のない内部フレームだけの状態での関節可動が、人間に近い」という話をします。


少し改造

RG νガンダムの完成写真を見ていると、私だけかもしれませんが、どうもヒザの付近が気になります。

オリジナル(下図左)のほうはヒザの伸ばしが気持ち足りない気がして、もうちょっと太ももとヒザが寄ってもいいんじゃないかなって(下図右)。

そこで意を決してちょっと微調整することにしました。加工するので改造です。


▼可動域を広げる改造
よく見てみると、ヒザの裏に隠れているシリンダーのオス、メスをそれぞれ短くすることで、太ももをもっとヒザに近づけることができるようです。

シリンダーとは訳すと「筒(つつ)」です。「シリンダー」を画像検索しても期待するものがあまり出てこないので、「シリンダー 油圧」で画像検索してみてください。
(なお、シリンダーの部品についてオスメスという言い方は普通はしないかもしれません)

モデルがダメになる事態は避けなければならないので、「充分に慎重に」検討して、そのうえで改造を実行することに決めました。
▼メス 削る前 10.6mm
シリンダーのメスを削る前にノギスで長さを測ったところ、10.6mmでした。

余談ですが、
ノギスの目盛りの見方って、上の目盛りで1mm単位で読み、コンマ以下の端数は切り捨て、下の目盛りで上の目盛りとぴったりと合っている目盛りを探してその数字をノギスの表記の通り x0.1mm して、コンマ以下の数字とする…なんですよね。

写真では、
上の目盛りで1mm単位で読むと、10mm。
下の目盛りで上の目盛りとぴったりと合っている目盛りは 6 なので、x0.1mm すると、0.6mm。
二つ合わせて、10.6mm。って感じです。
▼メス 削った後 9.8mm
削った後を測ったところ、9.8mmでした。
10.6 - 9.8 = 0.8mm 削ったことになります。
▼オスも削った(上:削る前、下:削った後)
オスも、メスに合わせて同じくらい削りました。
オス・メス両方削る必要があります。
写真は上が削る前、下が削った後です。
▼GIFアニメで改造結果を確認
削る前と削った後の可動域の変化がわかるように、写真を GIF アニメにしました。
シリンダを完全に閉じた状態で、太ももがヒザに近づいているのがわかります。
▼曲げると、外れるギリギリの状態
その状態でヒザを曲げたところです。

ドッキリ!
ヒザをぎゅっと曲げきると、
短くしたせいでシリンダーのオスがメスから外れるようになってしまいました。その辺はあるていど検討したけどダメだったか…orz

しかし、それは写真のように、内部フレームだけの状態での場合であって、内部フレームに白い装甲を付けたらたぶん(たぶんですが)可動域はせまくなり外れることもなくなるのでは…と思います。あたふた
伸ばした状態です。

さらにドッキリ! Oh! No!
内部フレームだけの全身状態が完成し
(説明書通りに組み立てた場合には内部フレームだけの状態にはなりません)、いろいろポーズを付けて遊んでいたら、曲げた状態でオスが外れてそれに気づかず伸ばし状態に戻してしまったようで、オスがメスのふちにぶつかり、オスに負荷がかかって白化してしまいました。折れそう。

写真は組み立てたものを ばらしてオスを取り出したところです。白化してますね。
なんとか折れないでいる様子。
このオスはリバーシブル(表裏同じ)なパーツなので、反転させて再度組み込みました。

…というわけで可動域が広がったことに期待はまだあるものの、問題が起きやすい状態になってしまったのであまりおすすめの改造とは言えません…普通に作ってその状態に満足したほうが良いですよ。

でも、まぁ、個人的には 問題のパーツを反転させて少し具合が良くなったので少し安心していて、可動域の変化が自分の期待通りかどうかを見るのも楽しみで、なんとか大丈夫という感じです。(→大丈夫じゃないです)

2020年10月24日追記:

可動域の変化はそこそこ期待通りでしたが、完成させてみると、ヒザを思い思いに曲げるときにシリンダーのオスメスがあっさりとはずれてしまいます。

紹介した改造は行わないでください。


顔のシール貼り

顔のシール(デカール)は2種類あります。

バンプレストのマークみたいな部分(黒い部分)に緑の目が最初から描かれている、シール1枚を貼ってOKなタイプと、

目が描かれていないバンプレストに上から目を貼るという、シール3枚を組み合わせるタイプがあります。

どういう理由で2種類に分けてあるのかが説明書に記載されていなくて、「選べるよ」という指示があるだけ。
たぶん、目が一緒に描かれているほう(上図)は細かい作業が苦手な人向けで、目を上から貼るタイプ(左図)は細かい作業ができる人向けなんだと思います。
きっと、左図のほうがリアルに仕上がるんだろうなと思って、私は左図の方法を選びました。

私は「上から貼るタイプ」と言っていますが、実は説明書には「目を上から貼る」とは書かれていなくて、バンプレストを先に貼って目を上から貼るのか、それとも目を先に貼ってバンプレストを上からかぶせるのかがわからず、しばし迷いました。
が、目を上から貼るのが正解だろうと判断しました。
▼精密な作業
クランプ(洗濯ばさみ みたいなやつ)で固定して、カッターの刃先や、つまようじ、ピンセットを駆使しました。
細かい作業やで!
▼右目をピンセットで…貼る!ぷるぷると震える
こっ細かい!
昔、1/144 ガンダム(300円)の顔を筆で塗ったのを思い出しました。同じくらい難しい。
▼10倍ル―ぺで、顔のバランスを確認
10倍ルーペごしに撮影。
左右に傾きの差がないか。
左右の離れ具合は正しいか。

「RG νガンダム」の顔のシール貼りは以上のような精密作業で大変でした。


内部フレームだけの状態でポーズ

百聞は一見に如かず、でとりあえず写真を見ればわかります。このガンプラは人間だ!

 
■前後の足の優雅なポーズ

■一本足でも立てる

■キャンドルスピンも可能

■腰のZ型関節がすごい

■おお、この表現力よ

ちなみに、写真の広げた手の平は、そういう形状のパーツで、指の関節は可動しません。

また、説明書通りに組み立てると写真のような「内部フレームのみの状態」にはなりません。

おそらく、装甲を付けると可動範囲はせまくなり、写真のようなポーズは一部できなくなると思われます。

でも、人間も裸であれば可能な限りの可動ができるけど、甲冑を付けると可動が制限されますよね。それと同じと考えれば、装甲を付けて可動範囲がせまくなるのは当然、自然なことと言えます。

余談ですが、

最初、これらの写真について、フィギュアスケートをネタにして面白おかしく表現しようとしましたが、そういう表現をする側(私)やそれを視聴する人たちは楽しくて良いかもしれないけど、ネタにされた側(たとえばフィギュアスケートの選手の方々)は楽しいと感じるとは限りません。過去に物まね芸人の行き過ぎた物まねで元ネタの人が歌を歌えなくなったという話もあるので、「何かを元ネタにする」という行為は少し考えたほうが良いのかもしれません。とはいえ制限すると自由な発想による自由な表現が委縮してしまうとも言われているので、結局は程度の問題かもしれません。


2020/9/22(火)

RPG試作 -[rpg]

最近、このページ上部の「NO PC WEEK に代わる PC 使用制限のしくみ(β版)」の表の右端「H. 作業内容」にて、「RPG試作」と記入していますが、それがどんなプログラムなのか紹介します。

RPG を開発する際に作ることになる「コマンドメニュー」部分のプログラムを、誰にでも教えられるように可能な限り簡潔に作りたいと私は思っていて、今回の試作はその取り組みの一環です。


▼よくある RPG のよくある「コマンドメニュー」(図は例であり、これが動くプログラムは 記事中にありません)

画面には複数のウィンドウ(選択メニュー)が表示されています。

それぞれのウィンドウは、行いたい1つのコマンド、

「リサリーはどうぐ「なんこう」をラズンに使う」

の各文節、「リサリー」、「どうぐ」、「なんこう」、「ラズン」、「使う」を決めています。


模式図

プログラミングのもとになった模式図です。

クラス Menus は複数の Menu を持っています。これが最初に示した RPG 画面の例の「複数のウィンドウ(選択メニュー)」に対応しています。

各 Menu は「どんな内容のメニューにするか」を定義した menusrc という変数(オブジェクト)を持っています。

この変数(オブジェクト)の中にさらに「ms_argName」という変数があり、これは「コマンドを構成する複数の文節のうちのどの「文節」を決めるのか」を示しています。たとえば「だれの」とか「どうする」とか文節を表す名前です。

result はその選択メニューの選んだ項目です。

そして図の下部のオレンジ色の「script」は「行いたい1つのコマンド」です。

それは1つの関数になっていて、引数として各メニューの選択結果(文節に入る具体的な実物。「リサリー」とか「なんこう」など)を受け取ります。


プログラムリスト

試作は JavaScript で作成しました。

プログラムリスト

このリンクのリンク先の右上の青い「実行」ボタンを押すと、何もない白い画面が出るだけです。

そのとき、CTRL + SHIFT + J を押すと、「コンソール」という画面が開きます。

開いたら、元の白い画面の中央付近をクリックします。

たぶん、[コマンド?] とコンソールのほうに表示され、

0 どうぐ

1 しらべる

の2つのコマンドが出ると思います。

(あくまでもプログラムの流れを大まかに決める試作品なので、最初に示したようなカッコイイ RPG 画面は出てきません)

キーボードのテンキーではないほうのを押すと、[ だれの? ] と表示されます。

以前にも同じような説明をしたと思いますが、現状、0 の選択をすることしか想定していないので、他の番号を押すとどうなるかはわかりません。

0、0、0、、、と押していくと最後に「結果:」と出て、メニューで選んだ内容が、コマンドとして実行されます。


上の模式図をもとにオブジェクト指向を使って(クラスなどを躊躇なく使うという意味)プログラムしました。

現在、だいたいこんな感じかなと思っているところです。

以前から試作を続けていて、「chainTo」だとか「パレット」などと言って、コマンドメニューの実現の方法を紹介してきました。


「chainTo」は名前を変えて「itemsBy」という単語でプログラム中で使われています。

これは、ちょっと難しいですが、たとえば、

メニュー(タイトル) コマンド? だれの? どのどうぐ? どうする? だれに?
選択結果 どうぐ リサリー なんこう 使う ラズン

というメニューを想定して、メニューを定義する(プログラム中に書く)際に、

「コマンド?」というメニューで「どうぐ」を選択した時点で、つづくメニューは、「だれの?」と、「どのどうぐ?」という2つのメニューであることは予想できます。しかし「どのどうぐ?」というメニューの内容(選択肢)は、前のメニューの「だれの?」が決定するまではどんな内容になるかはわかりません。つまり、実行時はリサリーが持つどうぐのリストがメニューの選択項目として並びますが、定義時点ではそれがリサリーであるとは限らないので、どうぐのリストを並べられません。この「未定」であることを示すために itemsBy という単語を使っています。メニュー定義の中に「itemsBy」の指示があるなら、前のメニューの結果を参照する、という処理になっています。


「パレット」は、「scriptArgs」という名前でプログラム中で使われています。

各メニューが決めるコマンドの文節を最終的なコマンド(関数)の引数へまとめる様子が、絵具のパレットみたいなので「パレット」と呼んでいました。

scriptArgs は連想配列(普通の配列は数字でデータを参照するのに対し、連想配列は名前(キー)でデータを参照します)になっていて、各メニューの ms_argName をキーにして、選択結果を scriptArgs に代入します。ms_argName はコマンドの文節の名前で、「だれの」とか「どうする」とか文節を区別するような名前です。(実際は関数の中で参照しやすいように "charA", "charB", "dougu" という名前になっています)


フローチャート:

フローチャートを作成したのでそれも掲載しておきます。リンク先は PDF です。

フローチャートを作れば、JavaScript に限らず、他のプログラミング言語にも実装しやすいと考えて。


最終的には、ゲームを作るのが好きな小中学生、高校生がRPGの作り方を学べるようなプログラムを目指していますが、現在は躊躇なくオブジェクト指向を使っているし、JavaScript の難しい感じの記述もいくつか使っています。async, await, Promise、そして array.map や array.forEach や => を使った関数みたいな構文(アロー関数)など。

また、今回アップしたプログラムの中で行われていることですが、

メニューの内容定義の前に monsters = new Array(); と書き、

メニューの内容定義の中でその配列 monsters を参照するなら、

以降で monsters を別の新しい配列に置き換えてはいけない、

…とか、そういうの小中学生にわかるんだろうか、と思ったりしています。

monsters = new Array();   //メニューの内容定義の前に monsters = new Array(); と書き、
menuTeigi = {
        koumokuList : monsters,  //メニューの内容定義の中でその配列 monsters を参照するなら、
}
monsters = new Array();   //以降で monsters を別の新しい配列に置き換えてはいけない
alert( menuTeigi.koumokuList == monsters );    //結果:false …つながりがなくなってしまうので置き換えてはいけない。

JavaScript の Array(配列)のメソッドのなかには新しい配列を作り出すタイプのものがあるので、知らないうちに置き換わっているということが考えられます。JavaScript でなくても他のプログラミング言語でも同様の現象はあると思います。

RPG の基本的なプログラムを示しても、こういうプログラミングの基本について解説をしないと、示したプログラムを活用できないんじゃないかなと思うんです。

「誰にでも教えられるようにもっとも簡潔に作りたい」という私の願いはなかなか難しいです。


(訪問者のどんなニーズと この記事がつながるか)


セキュリティに対して、上書きしろ -[eiga]

よく映画で、悪役が困ったことになった際、コンピューターに対して何かをやろうとするんだけど

「その権限がない」とコンピューターに言われる場面ってありますよね。

そのときによく聞くセリフで「(権限を)上書きしろ」っていうのがありますが、

そのセリフを聞くたびに私は、「そんなに簡単に上書き出来たら権限の意味ないよな…」って思います。

ひとりごとでした…

上書きしろ!
上書きしろ~!


(訪問者のどんなニーズと この記事がつながるか)


2020/9/20(日)

電子工作 通販 -[den]

とどこおっていた「自作 DRAM(メモリ)」や「秋月液晶」の電子工作のために、通販を行いました。

自作 DRAM はそろそろおおづめで、「8ビット4アドレス」を作成します。


秋月液晶は、液晶自体の購入は秋月で何気なく売られていて安くて気軽に購入できます。だから、ちょっと頑張ればできるかなと思ってしまいますが、いざ表示させようとすると一筋縄ではいかない難しい代物だとわかります。

普通のパソコン用モニタと同じような仕様で表示するものであって、気軽な電子工作では表示できません。

( ちまたではPSP(意味:プレイステーションポータブル)液晶と言われている液晶なので、それなりの実力のある液晶です)


▼液晶 + 適当なマイコン では到底表示できません。(16ビットマイコンを使って静止画(それも画像ではなく図形)くらいなら表示できるかも)

ちょっと余談:

1ピクセル当たり 9MHz なので、それが、480x272 ピクセルあるということは、1画面当たり何 Hz で表示するのかと言うと…

9MHz = 9,000,000Hz → 1 / 9,000,000秒 (1ピクセル当たりにかかる秒数)

1 / 9,000,000秒 × 480 × 272 = ( 480 × 272 ) / 9,000,000秒 =130,560 / 9,000,000秒 = 0.0145秒 (1画面当たりにかかる秒数)

→ 1秒/0.0145秒 = 68.96Hz ≒ 70Hz

なんと、一般的なディスプレイのリフレッシュレートになりました☆ へぇ、みたいな。

液晶の説明書(データシート)を見ると、9MHz に限らず、5~12MHz のあいだで良い、とあるので、つまり周波数をソフトウェアで 5~12MHz のあいだで変えられるなら、Windows のコントロールパネルみたいに液晶のリフレッシュレートを変更することもできるってことですかね。


▼液晶 + 高性能なマイコン + 外付けメモリー + 適当なマイコン で何とかならないかと考えたりしましたが、それも実現は難しく…


▼結局 LCDコントローラーという IC を別途購入しました。(秋月では売っていなくてマルツパーツ館で売っていました)

でも、LCDコントローラーの説明書(データシート)を読んだところ、結構難しそうでした。


▼説明書(データシート)を見て、自分用の図解を作成し、理解しようとしました。下図のリンク先は PDF です。(こんなことやってるよという意味での掲載です)


▼とりあえずこんな感じで、組み立てを考えて、通販しました。これが私のいつもの、電子機器の設計のやり方です。

Excel で基板などの写真を基板の形に添ってトリミングして、それを寸法通りに mm 単位で拡大縮小するので、基板上のレイアウトを正確に決められます。

レ点は通販のリストに入れたという確認です。


表示できるのはいつになることやら。。


(訪問者のどんなニーズと この記事がつながるか)


2020/9/19(土)

歯医者 日記1/2 -[health]

今日も歯医者へ行きました。

となりの診察台に座っていた幼稚園から小学校低学年くらいの男の子はお父さんが付き添いでそばにいましたが、診察前から

「こわい、こわい、、」

と言っていて、いざ診察が始まると、ものすごく わめいて診察を拒否していました。

でも診察は実行されたようでした。

私も同じくらいの年頃の時に、1回だけ同じように泣きわめいたことがあります。

そのときに怖かったのは、

その3点だったと思います。

小さなお子さんがそういう場で わめかないようにするには、上記3点を事前に教えてあげることではないかと思います。

でも、一番怖いのはたくましい身体をした男の先生、または銀縁の眼鏡をかけた男の先生、女の先生でも上記3点がそろえば怖いかもしれない。

事前に子供さんの好きな漫画とかを聞き出しておいて、その先生にその話題を子供さんに話させてあげるとか。

横で見ていてそんなことを考えました。

思えば私が飼ったニャンコたち(2匹)も、去勢・避妊手術を行った際、2匹とも私に必死にしがみついて「ふー!ふー!」と必死に息をしていました。

清潔な室内と、清潔な器具、清潔な服装の何者か(先生)と、これから何かが行われるという雰囲気。

怖くて当然ですね。

経験のない子供さんや、猫たちは、サンタクロースやお化けを信じるがゆえに、これからとんでもないことをされるんだという思いに襲われるんだ、と思いました。サンタクロースもお化けもいないと、科学的にわかっている大人は何をされるのかも痛さの程度もだいたいわかっているので、恐れることもありません。


焼肉なのに100gかよ 日記2/2 -[shopping]

歯医者のあとで立ち寄った肉屋さんで、メンチカツ1個(家に戻ってからの一服用)と、それから今日は4連休初日なので焼肉でもやろうと思って、肉を買いました。

「焼き肉用の肉がほしいと思っていて…」

と言って、店員さんに案内をしてもらおうと期待したんですが、その店員さんは「どの肉が焼き肉におすすめ」と気を利かして案内してくれず。

しかたなく、焼肉として当たり前の「カルビ」の文字を頼りに「牛 カルビ 上」と言いかけて値段を見たら、

100g 980円

ではないですか。

満足するためには少なくとも200g程度という感覚を私は持っていて、ってことは200gで2000円ではないか!

と、店員さんにほしい肉の名前を言いながら心の中で思いました。

(瞬間の出来事を長い文章で説明するのはジョジョみたいですね)

買いましたよ200g。100gじゃ「焼き肉なのに100gかよ」と店員さんに思われそうだったので。

2000円の肉を買ったことは、頭から排除することに(忘れる、なかったことに)しました。

低所得でいろいろ苦しいと思っている毎日なので。

メンチカツは専用の白い紙袋に入っていてそれを持ちながら添付のソースをかけて食べることができ、おいしく食べられました。

2000円のほうはこれからです。


(訪問者のどんなニーズと この記事がつながるか)


2020/9/14(月)

テスト(サイトCGI改修)

テスト実行

■要素がすでにあるタイプ


PROGRAM LIST

■要素をそこに作るタイプ

There is no canvas.
PROGRAM LIST


どんな改修をしたのか

私が HTML エディタを使って、日ごろの日記を書く際に、作った JavaScript をそのままの形で(そのままのファイルで何もいじらないで)、

%%com.javascript2:20200914-test/test.js,App,test1%%

とコマンドを記入するだけで、ページ上で実行できるしくみを「サーバー側の CGI」に搭載しました。

「サーバー側の CGI」とは何かについては後述しています。URL でアクセスできる普通の CGI ファイルではありません)

上記で動いているものは、そのテストです。


▼HTML エディタを使って、日記内にコマンドを書いているところ(上記の「テスト実行」部分を編集している)

図中の、2行あるうちの上のコマンドは、要素がすでにある場合にその要素の ID を指定するだけで JavaScript を実行できるもので、その書式は、

%%com.javascript2:<.jsファイルへの相対パス>,<実行用のクラス名>,<すでにある要素のID>%%

HTMLエディタ上で、レイアウトやデザインを確認しながら作りたいときに使用します。

下のコマンドは、要素がそこにない場合に、作成したい要素名と要素名に続く属性を指定して JavaScript を実行するもので、その書式は、

%%com.javascript1:<.jsファイルへの相対パス>,<実行用のクラス名>,<作成したい要素名>,<その属性>%%

HTMLエディタ上で、要素の内容(タグ名と属性)を手動ですばやく記述したいときに使用します。


そのしくみがなければ、作った JavaScript は

という問題があるので、プログラマーがいちいち対処しなくてはなりません。

それを解決したくて改修を行いました。


その実現のために具体的にどんな改修をしたのか

今回の改修は

上記で動いているテストは、これらの改修が行われています。


この改修によって、思い思いに JavaScript を作成したら、あとは

%%com.javascript2:20200914-test/test.js,App,test1%%

と書いて掲載するだけとなりました。



今後、同じしくみが用意される可能性

昨今のインターネットブラウザは、Adobe FLASH(インターネットブラウザ上で動く、表現力豊かな図やアニメを動かすしくみ)が終了し(現在「終了予定」ですが終了したも同然の状態です)、HTML5 として JavaScript の使用がメジャーになっているので、たぶんそのうち私が紹介したことと同じことを行うしくみが JavaScript の開発側(標準化団体)によって用意されると思います。FLASH は1つのページで複数の FLASH が動いても たしか問題なかったと思うので、JavaScript にもそういうしくみ(名前が競合しないしくみ)が用意されても不思議じゃないですよね。


「サーバー側の CGI で」ってどういうこと?

なお、上記文中で「サーバー側の CGI で」と言っていて何のことかわからない方も多いと思います。

http://test.com/test.cgi

とブラウザの URL 欄に入力すれば、その CGI が動きますが、ここで言っているのはこの CGI のことではありません。


「Apache web server」(アパッチ・ウェブ・サーバー)という WEBサーバーソフトの rewrite という機能を使うと、インターネットブラウザから URL を受け取ったら、それを、test.cgi?<そのURL> に置き換えることができます。

たとえば、インターネットブラウザから

http://test.com/test.html

というURLを受け取ったら、これを、

http://test.com/test.cgi?test.html

にサーバー側で置き換えたうえで、URL を処理させることができます。

この web6047 のサイトではこの機能を利用して、すべての URL が cgi (自作のサーバー側プログラム)を通して処理されるようになっています。

例に示した test.cgi は自作のプログラムなので、受け取った URL についてどう処理しようとプログラマーの自由です。

URL の通りにファイルを読んで、そのまま送っても良いし、ちょっと加工して送ることもできます。

「送る」というのは、たとえば Perl 言語であれば、「print "abc";」と書くことで abc という文字がブラウザへ送られます。

(web6047 のどのページを見ても上部に同じ「月別アイコンメニュー」が表示されるのもそのプログラムによるものです)


そのことを「サーバー側の CGI で」と言っています。

ブラウザから index.html という URL を受け取ったら、それを test.cgi?<そのURL>に置き換えて、その test.cgi の中で

index.html を読み取り、index.html 中の

%%com.javascript2:20200914-test/test.js,App,test1%%

という記述を探して処理しています。その処理は、

  1. 記述中に指定された .jsファイルを読み、その中で使われているクラス名に日付を追加します。
    (クラス名を書き換えた新しい.jsファイルをサーバーに作成します)
  2. index.html に <script src="その.jsファイル"></script> を追加
  3. また、<canvas id="..."></canvas> というタグも追加
  4. スクロールに関する処理も追加

という内容です。


「Apache web server」は、このウェブページの領域を提供しているさくらインターネットが採用しているウェブサーバー(ソフトウェア)です。

その「rewrite」という機能については、ちょっと時間がないので説明できませんが、WEB検索すると使い方が出てくると思います。(htaccessファイルに記述するとか、ディレクティブという難しい単語が並ぶので、ちょっと難しいかもしれません)


(…記事の書き方を制限するはずだったのに制限できていないな…)


(訪問者のどんなニーズと この記事がつながるか)


2020/9/13(日)

先月と今月の扉スクリプト -[javascript]

「壁がスジ状に光った後、そのスジに沿って割れる」という、天空の城ラピュタのシステム崩壊シーンみたいなものを表現しようとしました。

▼壁がスジ状に光る
↓ ↓ ↓ ↓ ↓
▼そのスジに沿って割れる

この状態で当初「作ろう」と思ったイメージの 90% の状態です。100% ではないのに、ここまで実現するまで33時間くらい掛けてしまいました。

もうちょっと頑張れば 100% のイメージに到達できるかもしれませんが、、ここで終了にします。

ちょっと力尽きました。

今回完成度90%にとどまり、その残りの10%の部分は何かというと、


ちなみに、副産物として、1か月分ではなく3か月分の扉スクリプトを作ることができました。

▼2020年8月分


▼2019年6月分(扉スクリプトが空欄だったので)


(訪問者のどんなニーズと この記事がつながるか)


2020/9/12(土)

入れ歯(日記 1/3) -[health]

今年 2020年の2月ごろに、右の上の奥歯を抜歯して、今日になってようやく入れ歯を入れることができました。

歯を抜いた場合の後処置として、「そのまま」、「インプラント」、「ブリッジ」、「入れ歯」といろいろ選べますが、私は入れ歯にしました。

「そのまま」放置してしまうと、(わかりやすい参考ページ

「インプラント」は医療保険がきかないのでウン十万かかり、その後のケアもうまくやらないと雑菌が繁殖してしまうとか。

「ブリッジ」は前後の歯に取付用の加工を行って義歯(読み:ぎし)を固定するので、前後の歯に負担がかかるし、雑菌が繁殖しやすいとか。

そういう説明を聞いて私は「入れ歯」が良いと思いました。

入れ歯は取り出して思い通りに洗浄できると思ったし、なにより私の身体は雑菌にやられやすいと日ごろから思っていたので、ケアの難しいインプラントやブリッジは私には向かないと思いました。

しかし、入れ歯も、健康な歯に比べれば雑菌が増えやすいらしいです。

入れ歯の日々のお手入れとして、いつもの 歯ブラシ と 歯磨き粉 だけで済むのだろうか――――

ドラッグストアで「入れ歯と歯茎のあいだにしこむような殺菌を目的とした塗り薬」みたいなものはないかと探しましたが、そういうものはありませんでした。入れ歯を固定する薬品とか、入れ歯を洗浄する薬剤とか、そういうものばかり。

そういう入れ歯関係のいろいろな商品(有名なポリデントとか)の説明を読んでいて、「入れ歯が原因で前後の歯が傷んでしまう」というのを知りました。

今日の入れ歯を入れてくれた歯医者さんも、そのへんの説明が念入りで、説明の内容がしっかりとしていました。

これはあなどらないほうがいいな… と思って、ドラッグストアでこんな商品を購入しました。

水槽に洗浄液と入れ歯を入れて超音波で洗うというもの。

4000円くらいしましたが、入れ歯を取り出して歯ブラシで磨くよりも、しっかり洗浄してくれそうなので良いかなと。

せっかく買ったのに役に立たなかった、という結果もあり得ますが、試してみるのも良いかもしれません。

なお、今回入れ歯を入れて、すべての歯が揃った状態になりました。何年ぶりかな。。


あと、「デンタルフロス(糸ようじ)」と「歯間ブラシ I 字型」は既に持っていますが、「歯間ブラシ L 字型」も今日見つけたので買いました。


▼デンタルフロス(糸ようじ) ▼歯間ブラシ I 字型 ▼歯間ブラシ L 字型(今日購入)
歯間の歯垢を 効果的に 取り除く 歯間の歯垢を取り除く(前歯用)
私はデンタルフロスが入らないときに補助的に使っています
歯間の歯垢を取り除く(奥歯用)


表面だけ念入りに磨いても、電動歯ブラシで強力に磨いても、さらには洗浄液を使って隅々まで殺菌したと思っても、歯と歯のあいだの歯垢は取れていなくて、それが原因で虫歯になるんだそうです。

歯と歯のあいだの歯垢はデンタルフロスを使って初めて取ることができるようです。デンタルフロスが入らないときは、歯間ブラシを使います。

こんなにいろいろやって、「歯ブラシだけでオッケー」だった時代は何だったんだろうと思います。


カナブン(日記 2/3) -[season]

歯医者の帰りに、スーパーで食料を買い、家の玄関付近に来たところで、首筋にチクッときました。

なんだ??と思いましたが、1回だけだったのでそのまま玄関に入ると、買い物袋を持った右肩付近に緑色のカナブンがしがみついていました。

べつにカナブンは悪い昆虫ではなく、カブトムシなどと似て比較的おとなしく、見た目もそんなに悪くはありません。しかし、

 ←「カナブン」のイラスト

ああ!っと思い!

取り除こうと思いましたが、彼ら昆虫はぎゅっとはつかめない!

払おうとしましたが、けっこう彼らの手足は「かぎ爪」になっていて、簡単に外れない!(優秀な爪じゃないか)

しかたないので、玄関の外に出てシャツを脱ぎましたが、ヤツの姿がない。

いなくなったか、いやそうとは限らないと思いつつ、落ち着いて、買い物を冷蔵庫に入れ始めたところで室内で

「ブーン」

いるじゃないか!

夜中で室内の電灯が付いていたので、あちこちガツンガツンとぶつかって、ガス台の裏に落ちたところ、チリ紙でふわっとすくってやり、外へポイ。

「彼らは悪いやつらじゃないんだよ」と大騒ぎの後で彼らを弁護してやりました。

最初にカナブン(?)がチクッとやったのは、カナブンだったのか、または違う理由だったのかわかりません。カナブンはチクッとはやらない昆虫です。


しいたけ(日記 3/3) -[season]

(デンタルフロス、歯間ブラシ、カナブンと図を作ってきましたが、しいたけの図はもう作れません、疲れた)

今日の買い物で「しいたけ」を買いました。

スーパーの店頭で「本日のお買い得」、「広告の品」といった ふれこみで、大々的に売られていたので買いました。

それにちょっと前に実家で母が出してくれた、丸ごと焼いた「しいたけ」が、肉厚でだいぶおいしかったんです。

無料素材集「PICTCAN」より

「一人暮らし」はかれこれ20年くらいになりますが、しいたけを買ったのは初めてでした。

綺麗な円形ではなく、ぶこつな形で、大きなものが3つ、パックされたものでした。

しいたけを料理したことはないので、どうやって食べるんだ?という状態です。

インターネットで調べればおいしい食べ方が出てきて、それも良いんですが、何でもインターネットで調べればいいのではなく、人に聞いたほうが良いと思って実家の母に電話しました。

教えてもらった食べ方がこれ。

  1. (母は言わなかったけど、たぶん しいたけの「じく」は包丁で取り除きます)
  2. フライパンに油をひく
  3. しいたけのヒラヒラのある内側ではなく、外側を下にして焼く
    火加減は中火 以下
    (内側は焼かないが、焼きたかったら焼いても良い)
  4. 水分が出てきたり、しんなりとしてきたら、しょうゆをぱぁーっとかける。
    (バターがあれば、しょうゆをかける前にバターをあえても良い)

まぁ、簡単なんですが、これを知っているのと知らないのとでは、成功と失敗は分かれると思います。聞いてよかった。

母も「(料理の方法は)もっと聞いてほしい、ボケ防止にもなるし」と言っていました。

しいたけは他の毒キノコとかと違って、毛がふさふさとしていて風合いがよく、カナブンじゃないですが、どこか人間に友好的な印象があるなと思いました。植物も動物も、生物って人間が好めるものは、どこか明らかに違うんですよね。ふさふさしているとか、おとなしいとか。

しいたけの肉厚なところをパクッと食べるのがおいしくて、良かったです。

バターありとバターなしの両方を作りましたが、どちらも良かったです。

ただ、もっと焼いたほうが良かったなと思いました。


(訪問者のどんなニーズと この記事がつながるか)



webappsrcの確認

1. %%com.webapp.src:/webappsrccheck.html%%
と記述した場合

webapps/src/default.cssのスタイル指定が効く
<!DOCTYPE html><!--ESCAPEPROCESS-->

<head>

<script>

function onloadx() {

//一般関数

console.log( "文字列" );

}

function Class1() {

//クラス

console.log( "文字列" );

}

Class1.prototype.method1 = function() {

//メソッド

console.log( "文字列" );

}

</script>

</head>

<body onload="onloadx();" style="">

Hello world!<BR>

</body>

</html>



2. <code>
%%com.webapp.src:/webappsrccheck.html%%
</code>
と記述した場合

このファイルのcodeのスタイル指定が効く
<!DOCTYPE html><!--ESCAPEPROCESS-->

<head>

<script>

function onloadx() {

//一般関数

console.log( "文字列" );

}

function Class1() {

//クラス

console.log( "文字列" );

}

Class1.prototype.method1 = function() {

//メソッド

console.log( "文字列" );

}

</script>

</head>

<body onload="onloadx();" style="">

Hello world!<BR>

</body>

</html>



3.
%%com.webapp.src:/webappsrccheck2.html,/webappsrccheck.html%%
と記述した場合

webapps/src/default.cssのスタイル指定が効く
<!DOCTYPE html><!--ESCAPEPROCESS-->

<head>

<script>

function onloadx() {

//一般関数 コメント変更

console.log( "文字列変更" );

行追加

}

function Class1() {

//クラス コメント変更

console.log( "文字列変更" );

行追加

}

Class1.prototype.method1 = function() {

//メソッド コメント変更

console.log( "文字列変更" );

行追加

}

</script>

</head>

<body onload="onloadx();文字列変更" style="">

Hello world!<BR>

HTML追加

</body>

</html>



4. <code>
%%com.webapp.src:/webappsrccheck2.html,/webappsrccheck.html%%</code>
と記述した場合

このファイルのcodeのスタイル指定が効く
<!DOCTYPE html><!--ESCAPEPROCESS-->

<head>

<script>

function onloadx() {

//一般関数 コメント変更

console.log( "文字列変更" );

行追加

}

function Class1() {

//クラス コメント変更

console.log( "文字列変更" );

行追加

}

Class1.prototype.method1 = function() {

//メソッド コメント変更

console.log( "文字列変更" );

行追加

}

</script>

</head>

<body onload="onloadx();文字列変更" style="">

Hello world!<BR>

HTML追加

</body>

</html>



5. リンクで
src?webappsrccheck.html
と記述した場合

webapps/src/default.cssのスタイル指定が効く
開く

6. リンクで
src?webappsrccheck2.html,webappsrccheck.html
と記述した場合

webapps/src/default.cssのスタイル指定が効く
開く